package com.dbms.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

public class DateIntervalCalculator {

    private static final SimpleDateFormat OUTPUT_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:00");



    /**
     * 根据起始时间和结束时间，计算出间隔1小时的所有日期时间，并以字符串列表形式返回
     *
     * @param startDate 起始日期时间
     * @param endDate 结束日期时间
     * @return 包含两个时间之间间隔1小时的所有日期时间的字符串列表
     */
    public static List<String> calculateDateTimesInInterval(Date startDate, Date endDate) {
        List<String> dateTimeList = new ArrayList<>();
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(startDate);

        while (calendar.getTime().before(endDate) || calendar.getTime().equals(endDate)) {
            dateTimeList.add(OUTPUT_FORMAT.format(calendar.getTime()));
            calendar.add(Calendar.HOUR_OF_DAY, 1);
        }

        return dateTimeList;
    }


    public static Date convertStringToDate(String dateString) {
        Date date = null;
        // 定义多种常见的日期格式
        SimpleDateFormat[] dateFormats = {
                new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()),
                new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()),
                new SimpleDateFormat("yyyy/MM/dd HH:mm:ss", Locale.getDefault()),
                new SimpleDateFormat("yyyy/MM/dd", Locale.getDefault()),
                new SimpleDateFormat("dd-MM-yyyy HH:mm:ss", Locale.getDefault()),
                new SimpleDateFormat("dd-MM-yyyy", Locale.getDefault()),
                new SimpleDateFormat("MM-dd-yyyy HH:mm:ss", Locale.getDefault()),
                new SimpleDateFormat("MM-dd-yyyy", Locale.getDefault())
        };

        for (SimpleDateFormat dateFormat : dateFormats) {
            try {
                date = dateFormat.parse(dateString);
                break;
            } catch (ParseException e) {
                // 如果当前格式解析失败，继续尝试下一种格式
                continue;
            }
        }

        return date;
    }

    public static void main(String[] args) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:00");
        try {
            Date startDate = sdf.parse("2024-10-10 12:00:00");
            Date endDate = sdf.parse("2024-10-11 12:00:00");

            List<String> result = calculateDateTimesInInterval(startDate, endDate);
            if (result!= null) {
                for (String dateTime : result) {
                    System.out.println(dateTime);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    /**
     * 将指定格式的字符串转换为Date对象
     *
     * @param dateStr 格式为"yyyy-MM-dd HH:mm:ss"的字符串
     * @return 对应的Date对象，如果转换失败则返回null
     */
    public static Date stringToDate(String dateStr) {
        try {
            return sdf.parse(dateStr);
        } catch (java.text.ParseException e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 将Date对象转换为指定格式的字符串
     *
     * @param date Date对象
     * @return 格式为"yyyy-MM-dd HH:mm:ss"的字符串，如果转换失败则返回null
     */
    public static String dateToString(Date date) {
        try {
            return sdf.format(date);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}